<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>关于栈</title>
</head>

<body>
    <script>
        // 栈 特点:后进先出
        /*模拟一个栈，并实现对栈的几个方法
            1.push(); 添加一(几)个元素到栈顶
            2.pop(); 移除栈顶的元素，同时返回被移除的元素
            3.isEmpty(); 判断栈是不是空的
            4.clear(); 清除栈
            5.size(); 返回栈内部元素的个数
            6.peek()返回栈顶的元素
        */
        class Stack {
            item = [];
            constructor() {};
            push(val) {
                return this.item.push(val);
            };
            print() {
                for (let i = this.item.length - 1; i >= 0; i--) {
                    console.log(this.item[i]);
                };
            };
            pop(val) {
                return this.item.pop(val);
            };
            isEmpty(val) {
                return this.item.length == 0;
            };
            clear() {
                this.item = [];
            };
            size() {
                return this.item.length;
            };
            peek() {
                return this.item[this.item.length - 1];
            };
        };
        // 利用栈进行进制的转换
        let stack = new Stack();
        // 封装10进制其他进制的方法 传入要转换的数字 和要转换的进制
        function conversion(num, type) {
            while (num / type) {
                stack.push(num % type);
                // 确保每次计算后都是整数
                num = parseInt(num / type);
            };
            stack.print();
            // 处理完成后对栈进行清除
            stack.clear();
        };
        conversion(10, 2);
        // 测试栈内还有没有元素
        console.log(stack.isEmpty());
    </script>
</body>

</html>